package main

import (
	"fmt"
)

/**
内置包之字符串处理介绍
*/
func main() {

	/*
		一. 字符串的遍历。字符串的遍历包括按字节遍历和按字符遍历
			TIPS: 如果字符串涉及中文，遍历字符推荐使用rune。因为一个byte存不下一个汉语文字的unicode值
	*/
	s := "123456"
	strRange(s)

	fmt.Println()

	s = "我爱Go语言"
	strRange(s)
}

/*

字符串的遍历
*/
func strRange(s string) {

	fmt.Println("字节长度: ", len(s))

	// 1. range 直接遍历字符串s
	length := 0
	for i, i2 := range s {
		fmt.Printf("%d: %c,", i, i2)
		length++
	}
	fmt.Println("\n字符串长度：", length)

	// 2. range 遍历字符串的字节数组[]byte(s)
	bytes := []byte(s)
	for i, i2 := range bytes {
		fmt.Printf("%d: %x,", i, i2)
	}
	fmt.Println("\n对应字节数组长度：", len(bytes))

	// 3. range 遍历字符串的字符数组rune(s)
	runes := []rune(s)
	for i, r := range runes {
		fmt.Printf("%d: %c,", i, r)
	}

	// 可以通过打印发现，字符串字节数组长度和字符数组长度不一定相同，这是因为汉字占用字符问题。
	// 对字符串直接使用len()函数求得的值为字节数组长度，而字符串长度需要通过字符数组的len()函数求得
	fmt.Println("\n对应字符数组长度：", len(runes))
}
